<?php

/**
* @desc Список учебных материалов.
* 
*/
class Tests_Frontend_Controller extends Kernel_Controller_Abstract 
{
    
    /**
     * @desc Устанавливает контроль над процессом.
     *
     * @return  Kernel_Filter
     */
    protected function _getFilter() 
    {
        //var_dump($_SESSION);
        switch (true) 
        {
            // проверяем на первое обращение
            case $this->_isStart() : 
                $token = 'Tests_Frontend_Start_Login';
                break;
            // проверяем достигнут ли конец
            case $this->_isEnd() : 
                $token = 'Tests_Frontend_End_Results';
                break;
            // по-умолчанию переходим к очередному вопросу
            default : $token = 'Tests_Frontend_Process';
        }
        return new $token;
    }
    
    /**
    * @desc Возвращает начата ли сессия 
    * 
    * @return boolean
    */
    private function _isStart() 
    {
        return is_null(Tests_Utils::getSesseion());
    }
    
    /**
    * @desc Сравнивает кол-во вопросов по текущей группе тестов
    * с кол-вом вопросов, занесенных в сессию
    * 
    * @return boolean
    */
    private function _isEnd() 
    {
        if (is_null($SESSION = Tests_Utils::getSesseion())) return false;
        
        $query = '
            SELECT 
                   COUNT(`t_q`.`id`) 
              FROM 
                   `tests_groups_collection` `t_g_c`
         LEFT JOIN 
                   `tests_questions` `t_q`
                ON 
                   `t_q`.`title_id` = `t_g_c`.`test`
             WHERE 
                   `t_g_c`.`title_id` = ' . $SESSION['test_id'];
        return count($SESSION['data']) == (int)database::fetchOne($query);
    }
        
}